Grokking Algorithms: An Illustrated Guide For Programmers And Other Curious People